μΉ μ λλ©μ΄μ
μ΄λ―Έμ§λ₯Ό λ³΄κ³ μ 체μ μΈ νλ¦μ λ°λΌ 리νλ‘μ° λ¦¬νμΈνΈ μν¬νμ λ³λͺ©νμλ±μ μμλ³΄κ³ μ΄ν΄νλ μκ°μ κ°μ§λ €κ³ ν©λλ€.

κ·Έλνλ₯Ό ν΄λ¦νκ±°λ νμ΄μ§μ λ€μ΄μλ©΄ μ λλ©μ΄μ
μ΄ μ€νλλ νμ΄μ§μ΄λ€.

μμ μ΄λ―Έμ§μμ Timingsλ κ·Έλνλ₯Ό ν΄λ¦ ν λλ§λ€ 리μ‘νΈ ν¨μκ° μ€νλλ νμ΄λ°μ 보μ¬μ£Όκ³ μμΌλ©° κ·Έ νμ΄λ°μ λ§μΆ° λΈλΌμ°μ μ νλ©΄μ 그리λ μμ
μ μννλ λ΄μ©μ μλ μμ νμΈ ν μ μλ€.

Timings μλ λΆλΆμ νλν΄ λ³΄μλ€. μ λλ©μ΄μ
μ λ³κ²½λ λλ§λ€ λΈλΌμ°μ μ λ λλ§ νλ κ³Όμ μ λ°λ³΅νλ κ²μ νμΈ ν μ μλ€.
- β μ€νμΌμ λ€μ κ³μ°νκ³ (dom tree, cssom treeλ₯Ό μμ±νκ³ λ λ νΈλ¦¬λ₯Ό μλ‘ μμ± κ³Όμ )
- β λ μ΄μμ κ³Όμ
- β’ νμΈνΈ κ³Όμ
- β£ λ μ΄μ΄ ν©μ± κ³Όμ
5λ²μ κ²½μ° μ μ μ΄ κ·Έμ΄μ Έ μλλ° μ΄ μ μ μ λΈλΌμ°μ νλ©΄μ λ λλ§ νλ©΄μ΄ λ
ΈμΆλμ΄μΌ νλ μμ μ΄λ€. νμ§λ§ λ§μ§λ§ λ μ΄μ΄ ν©μ±κ³Όμ μ΄ μλ£ λμ§ μμ μνλ‘ λ³΄μ¬ μ§λ€.
μμ κ°μ νμμ΄ μΌμ΄λλ©΄ νλ μμ΄ λλλκ±°λ μν¬ νμμ΄ μΌμ΄λ μ λλ©μ΄μ
μ΄ λ§€λλ½μ§ μλ€.
μ΄λ΄λλ reflowμ μΌμΌν€λ μμ±λ€ μ¬μ© 보λ€λ repaintλ₯Ό μΌμΌν€λ μμ±μ΄λ layout, paint λ¨κ³λ₯Ό 건λλμ μλ transform μμ±μ μ¬μ© νλ κ²μ΄ μ’λ€.
Reflow, Repaintλ₯Ό νΌνμ¬ CSS μ λλ©μ΄μ μ΅μ ννκΈ°
.style_ani{ position: absolute; left: 0; top: 0; width: ${({ width }) => width}%; transition: width 1.5s ease; height: 100%; background: ${({ isSelected }) => isSelected ? 'rgba(126, 198, 81, 0.7)' : 'rgb(198, 198, 198)'}; z-index: 1;}
μ cssλ widthκ°μ μ΄μ©νμ¬ μ λλ©μ΄μ
μ μ μ©νλ 리μ‘νΈμ μ€νμΌ μ»΄ν¬λνΈμ΄λ€. μ΄ λ΄μ©μ scaleX μμ±μ μ΄μ©νμ¬ λ³κ²½νμ¬ Reflow, Repaint νΌνκ³ GPU λμ λ°μ λ λλ§ νλλ‘ λ³κ²½νλ€.
.style_ani{ position: absolute; left: 0; top: 0; width: 100%; transform: scaleX(${props => props.width / 100}); transform-origin: center left; transition: width 1.5s ease; height: 100%; background: ${({ isSelected }) => isSelected ? 'rgba(126, 198, 81, 0.7)' : 'rgb(198, 198, 198)'}; z-index: 1;
scaleXμ μΆμ κ°μ΄λ°λ₯Ό κΈ°μ€μΌλ‘ μ€μΌμΌμ΄ λ³κ²½λκΈ° λλ¬Έμ transform-origin μμ±μ μΆκ°νμ¬ μΈλ‘λ κ°μ΄λ°λ‘ κ°λ‘λ μΌμͺ½μΌλ‘ μ€μΌμΌμ΄ λ³κ²½ λλλ‘ μμ νλ€.
λ μ λλ©μ΄μ
μ΄ transformμ μ μ©λλλ‘ transition μμ±μ κ°μ transformμΌλ‘ λ³κ²½νμ¬ μ€λ€.
μ λλ©μ΄μ Reflowμμ GPUμ¬μ©μΌλ‘ λ³κ²½ ν

FPS
μΉ λΈλΌμ°μ λ νΈμΆ μ€νμ μ€ν 컨ν
μ€νΈκ° μ‘΄μ¬νλ λμ, μ¦ μ€ν μ€μΈ ν¨μκ° μ‘΄μ¬νλ λμμλ λ¨Ήν΅μ΄ λμ΄ λ²λ¦½λλ€. λΈλΌμ°μ λ 60 νλ μμΌλ‘ μ λλ©μ΄μ
μ λ λλ§ νκ³ μλλ° κ·Έλνμ μ λλ©μ΄μ
μ΄ λλ λκΈ°λ νμμ μ λλ©μ΄μ
μ λ λλ§ νλλ° 60 νλ μμ λμ΄κ° νλ μ λλ‘ νμμ΄ λνλλ κ²μ
λλ€. μ΄λ μ¬μ©μ κ²½νμ μ
μν₯μ λ―ΈμΉ μ μμ΅λλ€.
λ°λΌμ, λΈλΌμ°μ μμ λμνλ JavaScript μ½λ, νΉν μ¬μ©μμμ μνΈμμ©μ μν μ½λλ₯Ό μμ±ν λμλ μ½λμ μ€ν μκ°μ΄ μΌλ§λ λ μ§λ₯Ό νμ μΌλμ λμ΄μΌ ν©λλ€.

Reflow μμμ κ·Έλν
Reflowκ° μΌμ΄λ μμμμλ 보λΌμκ³Ό μ΄λ‘μ λ± λ©μΈ μ°λ λμ μν μ΄ λ§€μ° νλ°ν κ²μ λ³Ό μ μλ€.

μΆμ² :
https://www.inflearn.com/course/lecture?courseSlug=%EC%9B%B9-%EC%84%B1%EB%8A%A5-%EC%B5%9C%EC%A0%81%ED%99%94-%EB%A6%AC%EC%95%A1%ED%8A%B8-1&unitId=48065&tab=curriculum